﻿#ifndef PARSEXMLINS_H
#define PARSEXMLINS_H

#include <QObject>
#include <thread>
#include <future>
#include <QFile>
#include "AddType.h"
using namespace std;
#define MATCH_CNT "\\/\\*json:\\{(.*?)\\}json\\*\\/"

class ParsexmlIns : public QObject
{
    Q_OBJECT
public:
    explicit ParsexmlIns(QObject *parent = nullptr);

public:
    static ParsexmlIns *getInstance();//单例模式
private:
    void InitEventtypeMap();//初始化事务类型Map
public:
    void parseXml();//解析xml文件
public:
    map<QString, int> getEventMap() const;//获取事务类型Map
    vector<QString> getJsons() const;//获取所有事务Json内容
    void setRoot_map(map<QString, QStringList> &Root_map);//设置<name, roots>对应的map
    void setRes_Map(map<int, QStringList> &Res_Map);//设置最终排序的结果map
    void setTemPath_Map(map<QString, QString> &TemPath_Map);//设置模版<_name, templates>Map
    void setname(QString &name);//设置事务名字
    map<QString, QStringList> getRoot_map() const;//获取<name, roots>对应的map
    map<int, QStringList> getRes_Map() const;//获取最终排序的结果map
    map<QString, QString> getTemPath_Map() const;//获取模版<_name, templates>Map
    QString getname() const;//获取事务名字

    void setxmlcontent(QString &xmlcontent);//jc
    void setxmlpath(QString &xmlpath);//jc
    QString getxmlpath() const;//jc
    QString getxmlcontent() const; //jc
private:
    void setcontentsToVector();//将解析出来的所有/*json:{}*json/内容存储到vector中
    void handlecontentsToMap();//将vector中的内容按照唯一键值进行设置成map
    void handlemapToJsons();//将map中的内容按照键值进行取出，并拼接成json后放入vector中
signals:
private:
    QString xmlcontent;
    map<QString, int> TypetoInt_Map; //存储 header ---> type ("events" ---> 1)
    vector<QString> Jsons;//所有事务的json文件内容
    vector<QString> contents;//读取的所有/*json:{}*json/内容
    map<QString, vector<QString>> content_Map;
    map<QString, QStringList> Root_map;//存储 对应模版(_name ---> template)---> 添加的根节点名称
    map<int, QStringList> Res_Map; //存储所有排序结果
    map<QString, QString> TemPath_Map; //存储指定名称的模版路径
    QString _name;//事务名字

    QString xmlpath;//jc

    QByteArray jsonData;//jc
    QJsonParseError error;//jc
    QJsonDocument doc;//jc
private:
    static ParsexmlIns *ins;
};

#endif // PARSEXMLINS_H
